home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / hplip / clean.py < prev    next >
Text File  |  2008-10-13  |  9KB  |  277 lines

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # (c) Copyright 2003-2008 Hewlett-Packard Development Company, L.P.
  5. #
  6. # This program is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation; either version 2 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program; if not, write to the Free Software
  18. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  19. #
  20. # Author: Don Welch
  21. #
  22.  
  23. __version__ = '3.0'
  24. __title__ = 'Printer Cartridge Cleaning Utility'
  25. __doc__ = "Cartridge cleaning utility for HPLIP supported inkjet printers."
  26.  
  27. #Std Lib
  28. import sys
  29. import re
  30. import getopt
  31. import time
  32. import operator
  33. import os
  34.  
  35. # Local
  36. from base.g import *
  37. from base import device, utils, maint, tui
  38. from prnt import cups
  39.  
  40. d = None
  41.  
  42. def CleanUIx(level):
  43.     global d
  44.     ok = tui.continue_prompt("Ready to perform level %d cleaning (Note: Wait for previous print to finish)." % level)
  45.     
  46.     if ok:
  47.         timeout = 0
  48.         time.sleep(5)
  49.         
  50.         try:
  51.             while True:
  52.                 update_spinner()
  53.                 try:
  54.                     d.open()
  55.                 except Error:
  56.                     time.sleep(2)
  57.                     timeout += 2
  58.                     continue
  59.                 
  60.                 if d.isIdleAndNoError():
  61.                     break
  62.                 
  63.                 time.sleep(1)
  64.                 timeout += 1
  65.                 
  66.                 if timeout > 45:
  67.                     log.error("Timeout waiting for print to finish.")
  68.                     sys.exit(0)
  69.             
  70.             
  71.         finally:
  72.             cleanup_spinner()
  73.             d.close()
  74.     
  75.     return ok
  76.  
  77. def CleanUI1():
  78.     log.note("Please wait for page to complete printing before continuing.")
  79.     log.info("\nLevel 1 cleaning complete. If the printout looks OK, enter 'q' to quit or <enter> to do a level 2 cleaning.")
  80.     return CleanUIx(2)
  81.     
  82.     
  83. def CleanUI2():
  84.     log.note("Please wait for page to complete printing before continuing.")
  85.     log.info("\nLevel 2 cleaning complete. If the printout looks OK, enter 'q' to quit or <enter> to do a level 3 cleaning.")
  86.     log.warn("Level 3 uses a lot of ink.")
  87.     return CleanUIx(3)
  88.  
  89. def CleanUI3():
  90.     log.info("\nLevel 3 cleaning complete. Check this page to see if the problem was fixed. If the test page was not printed OK, replace the print cartridge(s).")
  91.     
  92.     
  93. USAGE = [(__doc__, "", "name", True),
  94.          ("Usage: hp-clean [PRINTER|DEVICE-URI] [OPTIONS]", "", "summary", True),
  95.          utils.USAGE_ARGS,
  96.          utils.USAGE_DEVICE,
  97.          utils.USAGE_PRINTER,
  98.          utils.USAGE_SPACE,
  99.          utils.USAGE_OPTIONS,
  100.          utils.USAGE_BUS1, utils.USAGE_BUS2,
  101.          utils.USAGE_LOGGING1, utils.USAGE_LOGGING2, utils.USAGE_LOGGING3,
  102.          utils.USAGE_HELP,
  103.          utils.USAGE_EXAMPLES,
  104.          ("""Clean CUPS printer named 'hp5550':""", """$ hp-clean -php5550""",  "example", False),
  105.          ("""Clean printer with URI of 'hp:/usb/DESKJET_990C?serial=12345':""", """$ hp-clean -dhp:/usb/DESKJET_990C?serial=12345""", 'example', False),
  106.          utils.USAGE_SPACE,
  107.          utils.USAGE_NOTES,
  108.          utils.USAGE_STD_NOTES1, utils.USAGE_STD_NOTES2, 
  109.          utils.USAGE_SEEALSO,
  110.          ("hp-align", "", "seealso", False),
  111.          ("hp-colorcal", "", "seealso", False),
  112.          ]
  113.  
  114.     
  115.          
  116. def usage(typ='text'):
  117.     if typ == 'text':
  118.         utils.log_title(__title__, __version__)
  119.  
  120.     utils.format_text(USAGE, typ, __title__, 'hp-clean', __version__)
  121.     sys.exit(0)
  122.  
  123. log.set_module("hp-clean")
  124.  
  125. try:
  126.  
  127.     try:
  128.         opts, args = getopt.getopt(sys.argv[1:], 'p:d:hl:b:g',
  129.                                     ['printer=', 'device=', 'help', 'help-rest', 'help-man', 
  130.                                      'logging=', 'bus=', 'help-desc'])
  131.     except getopt.GetoptError, e:
  132.         log.error(e.msg)
  133.         usage()
  134.  
  135.     bus = device.DEFAULT_PROBE_BUS
  136.     log_level = logger.DEFAULT_LOG_LEVEL
  137.     printer_name = None
  138.     device_uri = None
  139.  
  140.     if os.getenv("HPLIP_DEBUG"):
  141.         log.set_level('debug')
  142.  
  143.     for o, a in opts:
  144.         if o in ('-h', '--help'):
  145.             usage()
  146.  
  147.         elif o == '--help-rest':
  148.             usage('rest')
  149.  
  150.         elif o == '--help-man':
  151.             usage('man')
  152.  
  153.         elif o == '--help-desc':
  154.             print __doc__,
  155.             sys.exit(0)
  156.  
  157.         elif o in ('-p', '--printer'):
  158.             if a.startswith('*'):
  159.                 printer_name = cups.getDefaultPrinter()
  160.                 log.debug(printer_name)
  161.                 
  162.                 if printer_name is not None:
  163.                     log.info("Using CUPS default printer: %s" % printer_name)
  164.                 else:
  165.                     log.error("CUPS default printer is not set.")
  166.                 
  167.             else:
  168.                 printer_name = a
  169.  
  170.         elif o in ('-d', '--device'):
  171.             device_uri = a
  172.  
  173.         elif o in ('-b', '--bus'):
  174.             bus = [x.lower().strip() for x in a.split(',')]
  175.             if not device.validateBusList(bus):
  176.                 usage()
  177.  
  178.         elif o in ('-l', '--logging'):
  179.             log_level = a.lower().strip()
  180.             if not log.set_level(log_level):
  181.                 usage()
  182.  
  183.         elif o == '-g':
  184.             log.set_level('debug')
  185.  
  186.  
  187.     if os.getuid() == 0:
  188.         log.warn("hp-clean should not be run as root.")
  189.     
  190.     if not device.validateBusList(bus):
  191.         usage()
  192.  
  193.     if device_uri and printer_name:
  194.         log.error("You may not specify both a printer (-p) and a device (-d).")
  195.         usage()
  196.  
  197.     utils.log_title(__title__, __version__)
  198.  
  199.     if not device_uri and not printer_name:
  200.         try:
  201.             device_uri = device.getInteractiveDeviceURI(bus, filter={'clean-type': (operator.gt, 0)})
  202.             if device_uri is None:
  203.                 sys.exit(0)
  204.         except Error:
  205.             log.error("Error occured during interactive mode. Exiting.")
  206.             sys.exit(0)
  207.  
  208.     try:
  209.         d = device.Device(device_uri, printer_name)
  210.     except Error, e:
  211.         log.error("Unable to open device: %s" % e.msg)
  212.         sys.exit(0)
  213.  
  214.     if d.device_uri is None and printer_name:
  215.         log.error("Printer '%s' not found." % printer_name)
  216.         sys.exit(0)
  217.  
  218.     if d.device_uri is None and device_uri:
  219.         log.error("Malformed/invalid device-uri: %s" % device_uri)
  220.         sys.exit(0)
  221.  
  222.     user_cfg.last_used.device_uri = d.device_uri
  223.  
  224.     if not d.cups_printers:
  225.         log.error("No appropriate printer queue found for device. Please setup printer with hp-setup and try again.")
  226.         sys.exit(1)
  227.  
  228.     try:
  229.         try:
  230.             d.open()
  231.         except Error:
  232.             log.error("Unable to print to printer. Please check device and try again.")
  233.             sys.exit(1)
  234.  
  235.         if d.isIdleAndNoError():
  236.             clean_type = d.mq.get('clean-type', 0)
  237.             log.debug("Clean type=%d" % clean_type)
  238.             d.close()
  239.  
  240.             try:
  241.                 if clean_type == CLEAN_TYPE_PCL:
  242.                     maint.cleaning(d, clean_type, maint.cleanType1, maint.primeType1,
  243.                                     maint.wipeAndSpitType1, tui.load_paper_prompt,
  244.                                     CleanUI1, CleanUI2, CleanUI3,
  245.                                     None)
  246.         
  247.                 elif clean_type == CLEAN_TYPE_LIDIL:
  248.                     maint.cleaning(d, clean_type, maint.cleanType2, maint.primeType2,
  249.                                     maint.wipeAndSpitType2, tui.load_paper_prompt,
  250.                                     CleanUI1, CleanUI2, CleanUI3,
  251.                                     None)
  252.         
  253.                 elif clean_type == CLEAN_TYPE_PCL_WITH_PRINTOUT:
  254.                     maint.cleaning(d, clean_type, maint.cleanType1, maint.primeType1,
  255.                                     maint.wipeAndSpitType1, tui.load_paper_prompt,
  256.                                     CleanUI1, CleanUI2, CleanUI3,
  257.                                     None)
  258.             
  259.                 else:
  260.                     log.error("Cleaning not needed or supported on this device.")
  261.             
  262.             except Error, e:
  263.                 log.error("An error occured: %s" % e[0])
  264.  
  265.         else:
  266.             log.error("Device is busy or in an error state. Please check device and try again.")
  267.             sys.exit(1)
  268.     finally:
  269.         d.close()
  270.  
  271. except KeyboardInterrupt:
  272.     log.error("User exit")
  273.     
  274. log.info("")
  275. log.info("Done.")
  276.  
  277.